package cn.lzm.proxy;

import cn.lzm.RpcApplication;

import java.lang.reflect.Proxy;

/**
 * @author lzm
 * @Date 2024/7/21
 * @description 用于创建代理对象，工厂模式
 */
public class CommonServiceProxyFactory {

    /**
     * 根据服务类获取代理对象
     *
     * @param serviceClass 接口的class
     * @param <T>
     * @return 接口的代理类（实现类）
     */
    @SuppressWarnings("all")
    public static <T> T getProxy(Class<T> serviceClass) {
        if (RpcApplication.getRpcConfig().isMock()) {
            return getMockProxy(serviceClass);
        }

        return (T) Proxy.newProxyInstance(serviceClass.getClassLoader()
                , new Class[]{serviceClass}, new CommonServiceProxy());
    }

    /**
     * 获取mock对象
     * @param serviceClass
     * @return
     * @param <T>
     */
    @SuppressWarnings("all")
    private static <T> T getMockProxy(Class<T> serviceClass) {
        return (T) Proxy.newProxyInstance(serviceClass.getClassLoader()
                , new Class[]{serviceClass}, new MockServiceProxy());
    }


}
